1. Field
This disclosure relates generally to data communication systems, and more specifically to systems for interleaving and de-interleaving data transmitted in a communication system, and corresponding methods therein.
2. Related Art
As the need or desire to quickly transmit (or otherwise transfer) large amounts of data increases, applications and systems continue to require higher data rates at a lower channel signal-to-noise ratio (SNR). To enable reliable data transmission for these applications and systems, more advanced coding and error correcting techniques are required.
One technique that can be used to increase the reliability of data transmission through a channel is interleaving. Interleaving can be used in digital data transmission to protect the transmission against burst errors. A burst error can be caused by noise or other signal perturbation that can overwrite, or change the value of, several bits in a row (e.g., contiguous or near contiguous bits) in a serial bit transmission. If too many bits in a row are overwritten, typical error correction schemes that expect errors to be more widely or uniformly distributed may be overwhelmed to the point that the burst error cannot be corrected.
In the process of interleaving data, an interleaver can be used to scramble the order of the bits that will be transmitted so that adjacent bits input into the interleaver are spaced further apart at the output of the interleaver. Scrambling the order increases the time between transmission of the previously adjacent bits so that a burst error that corrupts a group of bits will appear as isolated single-bit errors (e.g., a one-bit error in a channel symbol or data word) after being de-interleaved in the receiver. Such single-bit errors, which may be called random errors, are more easily corrected by the decoder.
Recently, convolutional codes have been combined with interleaving in order to further mitigate the effects of errors introduced to transmitted data in the channel. Convolutional codes introduce redundancy into the transmitted data so that in a transmitted data packet the value of each bit is dependent on earlier bits in the sequence. Still more advanced communication systems use multiple component codes that encode the data packet more than once, either in parallel or in series. An example in the prior art is “Turbo coding,” which is an error correction scheme that uses at least two concatenated recursive systematic convolutional coders in parallel. The first encoder encodes the input bits of a code block in sequence (i.e., without changing the order prior to encoding), while the second encoder encodes an interleaved version of the bits in the code block. In a Turbo encoder the interleaver is used to generate a different sequence of coded bits. An interleaver to combat burst errors can also be used in communication systems that use Turbo encoders-decoders for error correction. In a communication system that uses a Turbo code according to a Third Generation Partnership Project (3GPP) standard, the Turbo interleaver supports code block sizes from 40 to 5114 bits. Groups of interleavers are defined by a parameterized definition that depends on the number of bits in the code block.
In the receiver, a Turbo decoder can use a Maximum a-priori (MAP) decoder. The symbols received by the receiver, which can be represented by LLR (log-likelihood ratio) symbols, are input into the MAP decoder. Symbols are available either in a sequential or an interleaved manner. Interleaved symbols can be de-interleaved during alternate iterations of the Turbo decoder. For maximum efficiency, the map decoder should have symbols input at a constant rate, such as one times the clock rate (i.e., 1× clock rate). The interleaver can introduce latencies between adjacent symbols of the un-interleaved sequence at instances where the interleaver must skip, or discard, certain data that should not be input into the map decoder. In some prior art interleavers, the clock rate is increased to some multiple of the symbol rate (e.g., m times the clock rate, where in many cases m is equal to 2) to give the interleaver clock cycles that can be used to skip data.